﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LCTMoodle.Models.ViewModels;
using LCTMoodle.Models.DataModels;
using LCTMoodle.Service;
using LCTMoodle.Helper;
using System.Web.Script.Serialization;

namespace LCTMoodle.Controllers
{
    public class BaiVietController : Controller
    {
        #region KhoaHoc_Nhom
        #region KhoaHoc_Nhom_DienDan
        /// <summary>
        /// Lấy các bài viết của diễn đàn trong khóa học
        /// </summary>
        /// <param name="ma">Mã khóa học</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ...</param>
        public JsonResult KhoaHoc_Nhom_DienDan_BaiViet(int ma, int tu, int den)
        {
            //Lấy các bài viết
            //Model cần các bài viết để xuất ra và mã khóa học để lấy quyền
            Tuple<List<BaiVietViewModel>, int> model = new Tuple<List<BaiVietViewModel>, int>
                (
                    BaiVietService.layBaiVietTheoMaKhoaHoc_DienDan(ma, tu, den),
                    ma
                );

            //Kiểm tra nếu không thể lấy được dữ liệu
            if (model.Item1 == null)
            {                
                return Json(
                    new
                    {
                        trangThai = "Không lấy được bài viết (Lấy bài viết - diễn đàn)"
                    });
            }

            return Json(
                new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BaiViet/KhoaHoc_Nhom_DienDan_BaiViet.cshtml", model)
                });
        }
        
        /// <summary>
        /// Thêm bài viết cho diễn đàn
        /// </summary>
        /// <param name="form">Form chứa thông tin, trong form cần có trường "MaKhoaHoc" để lấy mã khóa học cần thêm</param>
        /// <returns></returns>
        [ValidateInput(false)] //Dùng để cho phép truyền vào chuỗi html        
        public JsonResult KhoaHoc_Nhom_DienDan_ThemBaiViet(FormCollection form)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                return Json(new
                    {
                        trangThai = "Chưa đăng nhập (Thêm bài viết - diễn đàn)"
                    });
            }

            switch (TienIch.kiemTraQuyenTrongKhoaHoc(Convert.ToInt32(form["MaKhoaHoc"]), "2"))
            {
                case 0:
                    break;
                case 1:
                    return Json(new
                    {
                        trangThai = "Lấy quyền thất bại (Thêm bài viết - diễn đàn)"
                    });
                case 2:
                    return Json(new
                    {
                        trangThai = "Không có quyền thêm bài viết (Thêm bài viết - diễn đàn)"
                    });
                default:
                    break;
            }
            #endregion Kiểm tra quyền

            BaiVietDataModel baiViet = new BaiVietDataModel();

            //Kiểm tra trong trường hợp trường "TapTin" không được tạo khi chặn gửi tập tin
            if (Request.Files["TapTin"] != null)
            {
                HttpPostedFileBase tapTin = Request.Files["TapTin"];

                //Kiểm tra kích thước tập tin để xác định có tập tin được truyền vào hay không
                if (tapTin.ContentLength != 0)
                {
                    baiViet.maTapTin = TapTinController.ThemTapTin(tapTin);
                    if (baiViet.maTapTin == 0)
                    {
                        return Json(
                            new
                            {
                                trangThai = "Thêm tập tin thất bại (Thêm bài viết - diễn đàn)"
                            });
                    }
                }
                else
                {
                    baiViet.maTapTin = 0;
                }
            }
            baiViet.maKhoaHoc = Convert.ToInt32(form["MaKhoaHoc"]);
            baiViet.maNguoiTao = ((NguoiDungViewModel)Session["NguoiDung"]).ma;
            baiViet.tieuDe = form["TieuDe"];
            baiViet.noiDung = form["NoiDung"];
            baiViet.nhomBaiViet = "DienDan";

            //Thêm bài viết
            int maBaiViet = BaiVietService.themBaiViet(baiViet);
            if (maBaiViet == 0)
            {          
                if (!TapTinController.XoaTapTinTheoMaTapTin(baiViet.maTapTin))
                {
                    return Json(
                        new
                        {
                            trangThai = "Thêm bài viết thất bại, xóa tập tin thất bại (Thêm bài viết - diễn đàn)"
                        });
                }
                return Json(
                    new
                    {
                        trangThai = "Thêm bài viết thất bại (Thêm bài viết - diễn đàn)"
                    });
            }


            //Thực hiện lấy chuỗi JSON và chuyển sang danh sách loại bài viết của bài viết
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            List<BaiViet_LoaiBaiVietDataModel> baiViet_LoaiBaiViet = serializer.Deserialize<List<BaiViet_LoaiBaiVietDataModel>>(form["LoaiBaiViet"]);

            //Nếu người dùng không thêm loại bài viết thì sử dụng loại bài viết mặc định là 1
            if (baiViet_LoaiBaiViet.Count == 0)
            {
                if (!BaiViet_LoaiBaiVietService.themBaiViet_LoaiBaiViet(
                    new BaiViet_LoaiBaiVietDataModel()
                    {
                        maBaiViet = maBaiViet,
                        maLoaiBaiViet = 1,
                        thoiGianApDung = DateTime.Now
                    }))
                {
                    //Nếu thêm loại bài viết thất bại => xóa bài viết
                    if (BaiVietService.xoaBaiVietTheoMaBaiViet(maBaiViet))
                    {
                        return Json(
                            new
                            {
                                trangThai = "Thêm bài viết thất bại (thêm loại bài viết thất bại) (Thêm bài viết - diễn đàn)"
                            });
                    }
                    if (!TapTinController.XoaTapTinTheoMaTapTin(baiViet.maTapTin))
                    {
                        return Json(
                            new
                            {
                                trangThai = "Thêm bài viết thất bại, xóa tập tin thất bại (thêm loại bài viết thất bại) (Thêm bài viết - diễn đàn)"
                            });
                    }
                    return Json(
                        new
                        {
                            trangThai = "Thêm bài viết thất bại (thêm loại thất bại - xóa bài viết thất bại) (Thêm bài viết - diễn đàn)"
                        });
                }
            }
            else
            {
                for (int i = 0; i < baiViet_LoaiBaiViet.Count; i++)
                {
                    baiViet_LoaiBaiViet[i].maBaiViet = maBaiViet;
                    if (!BaiViet_LoaiBaiVietService.themBaiViet_LoaiBaiViet(baiViet_LoaiBaiViet[i]))
                    {
                        //Nếu thêm loại bài viết thất bại => xóa bài viết
                        if (BaiVietService.xoaBaiVietTheoMaBaiViet(maBaiViet))
                        {
                            return Json(
                                new
                                {
                                    trangThai = "Thêm bài viết thất bại (thêm loại bài viết thất bại) (Thêm bài viết - diễn đàn)"
                                });
                        }
                        if (!TapTinController.XoaTapTinTheoMaTapTin(baiViet.maTapTin))
                        {
                            return Json(
                                new
                                {
                                    trangThai = "Thêm bài viết thất bại, xóa tập tin thất bại (thêm loại bài viết thất bại) (Thêm bài viết - diễn đàn)"
                                });
                        }
                        return Json(
                            new
                            {
                                trangThai = "Thêm bài viết thất bại (thêm loại thất bại - xóa bài viết thất bại) (Thêm bài viết - diễn đàn)"
                            });
                    }
                }
            }

            //Sau khi thêm bài viết cần lấy bài viết đó ra để thực hiện ajax hiển thị bài viết
            //Trong model cần có bài viết và mã khóa học để lấy quyền
            Tuple<List<BaiVietViewModel>, int> model = new Tuple<List<BaiVietViewModel>, int>
            (
                new List<BaiVietViewModel>(),
                baiViet.maKhoaHoc
            );

            model.Item1.Add(BaiVietService.layBaiVietTheoMaBaiViet(maBaiViet));

            //Kiểm tra nếu không lấy được dữ liệu
            if (model.Item1 == null)
            {
                return Json(
                    new
                    {
                        trangThai = "Thêm thành công, lấy bài viết thất bại (Thêm bài viết - diễn đàn)"
                    });
            }

            return Json(
                new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BaiViet/KhoaHoc_Nhom_DienDan_BaiViet.cshtml", model)
                });
        }
        
        /// <summary>
        /// Ghim bài viết cho diễn đàn
        /// </summary>
        /// <param name="ma">Mã bài viết cần ghim</param>
        /// <returns></returns>
        public ActionResult KhoaHoc_Nhom_DienDan_GhimBaiViet(int ma)
        {
            #region Kiểm tra quyền
            //Lấy mã khóa học để kiểm tra quyền
            int maKhoaHoc = KhoaHocService.layMaKhoaHocTheoMaBaiViet(ma);
            if (maKhoaHoc == 0)
            {
                TempData["ThongBao"] = new string[]
                {
                    "Lấy khóa học thất bại (Ghim bài viết)"
                };
                return RedirectToAction("Index", "TrangChu");
            }

            if (!TienIch.daDangNhap())
            {
                TempData["ThongBao"] = new string[]
                {
                    "Chưa đăng nhập (Ghim bài viết)"
                };
                return RedirectToAction("Index", "TrangChu");
            }

            switch (TienIch.kiemTraQuyenTrongKhoaHoc(maKhoaHoc, "11"))
            {
                case 0:
                    break;
                case 1:
                    TempData["ThongBao"] = new string[]
                    {
                        "Lấy quyền thất bại (Ghim bài viết)"
                    };
                    return RedirectToAction("Index", "TrangChu");
                case 2:
                    TempData["ThongBao"] = new string[]
                    {
                        "Không có quyền ghim bài viết (Ghim bài viết)"
                    };
                    return RedirectToAction("Index", "TrangChu");
                default:
                    break;
            }
            #endregion Kiểm tra quyền

            if (!BaiVietService.capNhatGhimBaiVietTheoMaBaiViet_DienDan(ma))
            {
                TempData["ThongBao"] = new string[]
                {
                    "Ghim bài viết thất bại (Ghim bài viết)"
                };
            }
            else
            {
                TempData["ThongBao"] = new string[]
                {
                    "Ghim bài viết thành công (Ghim bài viết)"
                };
            }
            return Redirect(Request.UrlReferrer.ToString() + "#diendan");
        }
       
        /// <summary>
        /// Xóa ghim bài viết của cho diễn đàn
        /// </summary>
        /// <param name="ma">Mã bài viết cần xóa</param>
        /// <returns></returns>
        public ActionResult KhoaHoc_Nhom_DienDan_BoGhimBaiViet(int ma)
        {
            #region Kiểm tra quyền
            //Lấy mã khóa học để kiểm tra quyền
            int maKhoaHoc = KhoaHocService.layMaKhoaHocTheoMaBaiViet(ma);
            if (maKhoaHoc == 0)
            {
                TempData["ThongBao"] = new string[]
                {
                    "Lấy khóa học thất bại (Bỏ ghim bài viết)"
                };
                return RedirectToAction("Index", "TrangChu");
            }

            if (!TienIch.daDangNhap())
            {
                TempData["ThongBao"] = new string[]
                {
                    "Chưa đăng nhập (Bỏ ghim bài viết)"
                };
                return RedirectToAction("Index", "TrangChu");
            }

            switch (TienIch.kiemTraQuyenTrongKhoaHoc(maKhoaHoc, "11"))
            {
                case 0:
                    break;
                case 1:
                    TempData["ThongBao"] = new string[]
                    {
                        "Lấy quyền thất bại (Ghim bài viết)"
                    };
                    return RedirectToAction("Index", "TrangChu");
                case 2:
                    TempData["ThongBao"] = new string[]
                    {
                        "Không có quyền bỏ ghim bài viết (Bỏ ghim bài viết)"
                    };
                    return RedirectToAction("Index", "TrangChu");
                default:
                    break;
            }
            #endregion Kiểm tra quyền

            if (!BaiVietService.BoGhimBaiVietTheoMaBaiViet_DienDan(ma))
            {
                TempData["ThongBao"] = new string[]
                {
                    "Bỏ ghim bài viết thất bại (Bỏ ghim bài viết)"
                };
            }
            else
            {
                TempData["ThongBao"] = new string[]
                {
                    "Bỏ ghim bài viết thành công (Bỏ ghim bài viết)"
                };
            }
            return Redirect(Request.UrlReferrer.ToString() + "#diendan");
        }
        #endregion KhoaHoc_Nhom_DienDan
        #region KhoaHoc_Nhom_BaiGiang
        /// <summary>
        /// Lấy danh sách các bài giảng
        /// </summary>
        /// <param name="ma">Mã khóa học</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ...</param>
        public JsonResult KhoaHoc_Nhom_BaiGiang_BaiViet(int ma, int tu, int den)
        {
            //Cần có mã khóa học để xác định quyền
            Tuple<List<BaiVietViewModel>, int> model = new Tuple<List<BaiVietViewModel>, int>
                (
                    BaiVietService.layBaiVietTheoMaKhoaHoc_BaiGiang(ma, tu, den),
                    ma
                );

            //Kiểm tra nếu lấy dữ liệu không được
            if (model.Item1 == null)
            {
                return Json(new
                    {
                        trangThai = "Lấy bài viết thất bại (Lấy bài viết - bài giảng)"
                    });
            }

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BaiViet/KhoaHoc_Nhom_BaiGiang_BaiViet.cshtml", model)
                });
        }
  
        /// <summary>
        /// Thêm bài viết vào bài giảng của khóa học
        /// </summary>
        /// <param name="form">form chứa thông tin cần có trường "MaKhoaHoc" để xác định mã khóa học</param>
        [ValidateInput(false)] //Dùng để cho phép truyền vào chuỗi html
        public JsonResult KhoaHoc_Nhom_BaiGiang_ThemBaiViet(FormCollection form)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                return Json(new
                {
                    trangThai = "Chưa đăng nhập (Thêm bài viết - bài giảng)"
                });
            }

            switch (TienIch.kiemTraQuyenTrongKhoaHoc(Convert.ToInt32(form["MaKhoaHoc"]), "4"))
            {
                case 0:
                    break;
                case 1:
                    return Json(new
                    {
                        trangThai = "Lấy quyền thất bại (Thêm bài viết - bài giảng)"
                    });
                case 2:
                    return Json(new
                    {
                        trangThai = "Không có quyền thêm bài viết (Thêm bài viết - bài giảng)"
                    });
                default:
                    break;
            }
            #endregion Kiểm tra quyền

            BaiVietDataModel baiViet = new BaiVietDataModel();
            //Kiểm tra nếu trường "TapTin" không được tạo ra khi chặn gửi tập tin
            HttpPostedFileBase tapTin = Request.Files["TapTin"];
            if (tapTin.ContentLength != 0)
            {
                baiViet.maTapTin = TapTinController.ThemTapTin(tapTin);
                if (baiViet.maTapTin == 0)
                {
                    return Json(new
                    {
                        trangThai = "Thêm tập tin thất bại (Thêm bài viết - bài giảng)"
                    });
                }
            }
            else
            {
                baiViet.maTapTin = 0;
            }

            baiViet.maKhoaHoc = Convert.ToInt32(form["MaKhoaHoc"]);
            baiViet.maNguoiTao = ((NguoiDungViewModel)Session["NguoiDung"]).ma;
            baiViet.tieuDe = form["TieuDe"];
            baiViet.noiDung = form["NoiDung"];
            baiViet.nhomBaiViet = "BaiGiang";
            int maBaiViet = BaiVietService.themBaiViet(baiViet);

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (maBaiViet == 0)
            {
                if (!TapTinController.XoaTapTinTheoMaTapTin(baiViet.maTapTin))
                {
                    return Json(new
                    {
                        trangThai = "Thêm bài viết thất bại, xóa bài viết thất bại (Thêm bài viết - bài giảng)"
                    });
                }
                return Json(new
                    {
                        trangThai = "Thêm bài viết thất bại (Thêm bài viết - bài giảng)"
                    });
            }
            
            //Sau khi thêm bài viết cần lấy ra bài viết cần thêm để xử lý ajax hiển thị
            //Cần có mã khóa học để xác định quyền
            Tuple<List<BaiVietViewModel>, int> model = new Tuple<List<BaiVietViewModel>, int>
            (
                new List<BaiVietViewModel>(),
                baiViet.maKhoaHoc
            );

            model.Item1.Add(BaiVietService.layBaiVietTheoMaBaiViet(maBaiViet));

            //Kiểm tra khi lấy dữ liệu thất bại
            if (model.Item1 == null)
            {
                return Json(new
                {
                    trangThai = "Thêm thành công, lấy bài viết thất bại (Thêm bài viết - bài giảng)"
                });
            }

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BaiViet/KhoaHoc_Nhom_BaiGiang_BaiViet.cshtml", model)
                });
        }
        #endregion KhoaHoc_Nhom_BaiGiang
        #region KhoaHoc_Nhom_TaiLieu
    
        /// <summary>
        /// Lấy danh sách các tài liệu
        /// </summary>
        /// <param name="ma">Mã khóa học</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ...</param>
        /// <returns></returns>
        public JsonResult KhoaHoc_Nhom_TaiLieu_BaiViet(int ma, int tu, int den)
        {
            //Cần có mã khóa học để xác định quyền
            Tuple<List<BaiVietViewModel>, int> model = new Tuple<List<BaiVietViewModel>, int>
                (
                    BaiVietService.layBaiVietTheoMaKhoaHoc_TaiLieu(ma, tu, den),
                    ma
                );

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (model.Item1 == null)
            {
                return Json(new
                    {
                        trangThai = "Lấy bài viết thất bại (Lấy bài viết - tài liệu)"
                    });
            }

            return Json(new
                {
                   trangThai = "OK",
                   ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BaiViet/KhoaHoc_Nhom_TaiLieu_BaiViet.cshtml", model)
                });
        }
    
        /// <summary>
        /// Thêm bài viết vào tài liệu của khóa học
        /// </summary>
        /// <param name="form">form chứa thông tin cần có trường "MaKhoaHoc" để xác định mã khóa học</param>
        /// <returns></returns>
        [ValidateInput(false)] //Dùng để cho phép truyền vào chuỗi html
        public JsonResult KhoaHoc_Nhom_TaiLieu_ThemBaiViet(FormCollection form)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                return Json(new
                {
                    trangThai = "Chưa đăng nhập (Thêm bài viết - tài liệu)"
                });
            }

            switch (TienIch.kiemTraQuyenTrongKhoaHoc(Convert.ToInt32(form["MaKhoaHoc"]), "13"))
            {
                case 0:
                    break;
                case 1:
                    return Json(new
                    {
                        trangThai = "Lấy quyền thất bại (Thêm bài viết - tài liệu)"
                    });
                case 2:
                    return Json(new
                    {
                        trangThai = "Không có quyền thêm bài viết (Thêm bài viết - tài liệu)"
                    });
                default:
                    break;
            }
            #endregion Kiểm tra quyền

            BaiVietDataModel baiViet = new BaiVietDataModel();

            //Kiểm tra nếu trường "TapTin" không được tạo ra khi chặn gửi tập tin
            HttpPostedFileBase tapTin = Request.Files["TapTin"];
            if (tapTin.ContentLength != 0)
            {
                baiViet.maTapTin = TapTinController.ThemTapTin(tapTin);
                if (baiViet.maTapTin == 0)
                {
                    return Json(new
                    {
                        trangThai = "Thêm tập tin thất bại (Thêm bài viết - tài liệu)"
                    });
                }
            }
            else
            {
                baiViet.maTapTin = 0;
            }

            baiViet.maKhoaHoc = Convert.ToInt32(form["MaKhoaHoc"]);
            baiViet.maNguoiTao = ((NguoiDungViewModel)Session["NguoiDung"]).ma;
            baiViet.tieuDe = form["TieuDe"];
            baiViet.noiDung = form["NoiDung"];
            baiViet.nhomBaiViet = "TaiLieu";
            int maBaiViet = BaiVietService.themBaiViet(baiViet);
            if (maBaiViet == 0)
            {
                if (!TapTinController.XoaTapTinTheoMaTapTin(baiViet.maTapTin))
                {
                    return Json(new
                    {
                        trangThai = "Thêm bài viết thất bại, xóa tập tin thất bại (Thêm bài viết - tài liệu)"
                    });
                }
                return Json(new
                    {
                        trangThai = "Thêm bài viết thất bại (Thêm bài viết - tài liệu)"
                    });
            }

            //Sau khi thêm bài viết cần lấy ra bài viết cần thêm để xử lý ajax hiển thị
            //Cần có mã khóa học để xác định quyền
            Tuple<List<BaiVietViewModel>, int> model = new Tuple<List<BaiVietViewModel>, int>
            (
                new List<BaiVietViewModel>(),
                baiViet.maKhoaHoc
            );

            model.Item1.Add(BaiVietService.layBaiVietTheoMaBaiViet(maBaiViet));

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (model.Item1 == null)
            {
                return Json(new
                {
                    trangThai = "Thêm thành công, lấy bài viết thất bại (Thêm bài viết - tài liệu)"
                });
            }

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BaiViet/KhoaHoc_Nhom_TaiLieu_BaiViet.cshtml", model)
                });
        }
        #endregion
        #region KhoaHoc_Nhom_BaiTap
        /// <summary>
        /// Lấy danh sách các bài tập
        /// </summary>
        /// <param name="ma">Mã khóa học</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ...</param>
        public JsonResult KhoaHoc_Nhom_BaiTap_BaiViet(int ma, int tu, int den)
        {
            ///Cần có mã khóa học để xác định quyền
            Tuple<List<BaiVietViewModel>, int> model = new Tuple<List<BaiVietViewModel>, int>
                (
                    BaiVietService.layBaiVietTheoMaKhoaHoc_BaiTap(ma, tu, den),
                    ma
                );

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (model.Item1 == null)
            {
                return Json(new
                    {
                        trangThai = "Lấy bài viết thất bại (Lấy bài viết - tài liệu)"
                    });
            }

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BaiViet/KhoaHoc_Nhom_BaiTap_BaiViet.cshtml", model)
                });
        }
     
        /// <summary>
        /// Thêm bài viết vào bài tập của khóa học
        /// </summary>
        /// <param name="form">form chứa thông tin cần có trường "MaKhoaHoc" để xác định mã khóa học</param>
        /// <returns></returns>
        [ValidateInput(false)] //Dùng để cho phép truyền vào chuỗi html
        public JsonResult KhoaHoc_Nhom_BaiTap_ThemBaiViet(FormCollection form)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                return Json(new
                {
                    trangThai = "Chưa đăng nhập (Thêm bài viết - bài tập)"
                });
            }

            switch (TienIch.kiemTraQuyenTrongKhoaHoc(Convert.ToInt32(form["MaKhoaHoc"]), "3"))
            {
                case 0:
                    break;
                case 1:
                    return Json(new
                    {
                        trangThai = "Lấy quyền thất bại (Thêm bài viết - bài tập)"
                    });
                case 2:
                    return Json(new
                    {
                        trangThai = "Không có quyền thêm bài viết (Thêm bài viết - bài tập)"
                    });
                default:
                    break;
            }
            #endregion Kiểm tra quyền

            BaiVietDataModel baiViet = new BaiVietDataModel();

            //Kiểm tra nếu trường "TapTin" không được tạo ra khi chặn gửi tập tin
            HttpPostedFileBase tapTin = Request.Files["TapTin"];
            if (tapTin.ContentLength != 0)
            {
                baiViet.maTapTin = TapTinController.ThemTapTin(tapTin);
                if (baiViet.maTapTin == 0)
                {
                    return Json(new
                    {
                        trangThai = "Thêm tập tin thất bại (Thêm bài viết - bài tập)"
                    });

                }
            }
            else
            {
                baiViet.maTapTin = 0;
            }

            baiViet.maKhoaHoc = Convert.ToInt32(form["MaKhoaHoc"]);
            baiViet.maNguoiTao = ((NguoiDungViewModel)Session["NguoiDung"]).ma;
            baiViet.tieuDe = form["TieuDe"];
            baiViet.noiDung = form["NoiDung"];
            baiViet.nhomBaiViet = "BaiTap";
            int maBaiViet = BaiVietService.themBaiViet(baiViet);

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (maBaiViet == 0)
            {
                if (!TapTinController.XoaTapTinTheoMaTapTin(baiViet.maTapTin))
                {
                    return Json(new
                    {
                        trangThai = "Thêm bài viết thất bại, xóa tập tin thất bại (Thêm bài viết - bài tập)"
                    });
                }
                return Json(new
                    {
                        trangThai = "Thêm bài viết thất bại (Thêm bài viết - bài tập)"
                    });
            }

            //Sau khi thêm bài viết cần lấy ra bài viết cần thêm để xử lý ajax hiển thị
            //Cần có mã khóa học để xác định quyền
            Tuple<List<BaiVietViewModel>, int> model = new Tuple<List<BaiVietViewModel>, int>
            (
                new List<BaiVietViewModel>(),
                baiViet.maKhoaHoc
            );

            model.Item1.Add(BaiVietService.layBaiVietTheoMaBaiViet(maBaiViet));

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (model.Item1 == null)
            {
                return Json(new
                    {
                        trangThai = "Thêm thành công, lấy bài viết thất bại (Thêm bài viết - bài tập)"
                    });
            }

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BaiViet/KhoaHoc_Nhom_BaiTap_BaiViet.cshtml", model)
                });
        }
        #endregion
        #endregion
        
        /// <summary>
        /// Sửa bài viết
        /// </summary>
        /// <param name="maBaiViet">Mã bài viết</param>
        /// <param name="tieuDe">Tiêu đề</param>
        /// <param name="noiDung">Nội dung</param>
        [ValidateInput(false)]
        public ContentResult SuaBaiViet(int maBaiViet, string tieuDe, string noiDung)
        {
            #region Kiểm trả quyền
            if (!TienIch.daDangNhap())
            {
                return Content("Chưa đăng nhập (Sửa bài viết)");
            }

            //Lấy bài viết để kiểm trả xem có phải là người tạo không
            BaiVietViewModel bv = BaiVietService.layBaiVietTheoMaBaiViet(maBaiViet);
            {
                if (bv == null)
                {
                    return Content("Lấy bài viết thất bại (Sửa bài viết)");
                }
                if ((Session["NguoiDung"] as NguoiDungViewModel).ma != bv.maNguoiTao)
                {
                    return Content("Không có quyền sửa bài viết (Sửa bài viết)");
                }
            }
            #endregion Kiểm trả quyền

            //Lấy thông tin lưu vào đối tượng
            BaiVietViewModel baiViet = new BaiVietViewModel();
            baiViet.ma = maBaiViet;
            baiViet.tieuDe = tieuDe;
            baiViet.noiDung = noiDung;

            //Cập nhật
            if (BaiVietService.capNhatBaiVietTheoMaBaiViet(baiViet))
            {
                return Content("OK");
            }
            else
            {
                return Content("Cập nhật bài viết thất bại (Sửa bài viết)");
            }
        }

        /// <summary>
        /// Xóa bài viết
        /// </summary>
        /// <param name="ma">Mã bài viết</param>
        public ContentResult XoaBaiViet(int ma)
        {
            #region Kiểm trả quyền
            if (!TienIch.daDangNhap())
            {
                return Content("Chưa đăng nhập (Xóa bài viết)");
            }
            int maKhoaHoc = KhoaHocService.layMaKhoaHocTheoMaBaiViet(ma);
            if (maKhoaHoc == 0)
            {
                return Content("Lấy mã khóa học thất bại (Xóa bài viết)");
            }
            switch(TienIch.kiemTraQuyenTrongKhoaHoc(maKhoaHoc, "6"))
            {
                case 0:
                    break;
                case 1:
                    return Content("Lấy quyền thất bài (Xóa bài viết)");
                case 2:
                    BaiVietViewModel baiViet = BaiVietService.layBaiVietTheoMaBaiViet(ma);
                    if (baiViet == null)
                    {
                        return Content("Lấy bài viết thất bài (Xóa bài viết)");
                    }
                    if (baiViet.maNguoiTao == (Session["NguoiDung"] as NguoiDungViewModel).ma)
                    {
                        break;
                    }
                    return Content("Không có quyền xóa bài viết (Xóa bài viết)");
                default:
                    break;
            }
            #endregion Kiểm tra quyền

            //Xóa tập tin trước khi xóa bài viết
            //Lấy toàn bộ tập tin của bài viết lẫn bình luận để xóa
            List<TapTinViewModel> tapTin = TapTinService.layTapTinToanBoTheoMaBaiViet(ma);
            for (int i = 0; i < tapTin.Count; i++)
            {
                TienIch.xoaTapTin(tapTin[i].tenDuongDan);
            }

            if (!BaiVietService.xoaBaiVietTheoMaBaiViet(ma))
            {
                return Content("Xóa bài viết thất bại (Xóa bài viết)");
            }

            return Content("OK");
        }

        /// <summary>
        /// Tăng thứ tự bài viết
        /// </summary>
        /// <param name="ma">Mã bài viết</param>
        public ContentResult TangThuTu(int ma)
        {
            if (BaiVietService.capNhatTangGiamThuTuBaiViet(ma, true))
            {
                return Content("OK");
            }
            else
            {
                return Content("Tăng thứ tự bài viết thất bại");
            }
        }

        /// <summary>
        /// Giảm thứ tự bài viết
        /// </summary>
        /// <param name="ma">Mã bài viết</param>
        public ContentResult GiamThuTu(int ma)
        {
            if (BaiVietService.capNhatTangGiamThuTuBaiViet(ma, false))
            {
                return Content("OK");
            }
            else
            {
                return Content("Giảm thứ tự bài viết thất bại");
            }
        }
    }
}
